package poker

const (
	OpSyncGameReq = 9  // 入局恢复
	OpSeatDown    = 10 // 玩家入座
	OpSeatUp      = 11 // 玩家离座
	OpStartGame   = 12 // 房主开始游戏
	OpCall        = 13 // 玩家Call
	OpCheck       = 14 // 玩家Check
	OpRaise       = 15 // 玩家加注
	OpAllin       = 16 // 玩家Allin
	OpFold        = 17 // 玩家弃牌

	OpSyncGameResp     = 109 // 入局恢复
	OpPlayerSeatedDown = 110 // 广播新玩家入座
	OpPlayerSeatedUp   = 111 // 广播玩家离开座位
	OpGameStarted      = 112 // 广播游戏已准备开始

	OpGamePreFlop  = 209 // 广播游戏进入PreFlop
	OpPlayerAction = 210 // 广播玩家操作

	OpError = 99 // 通用错误信息，附带消息

)

// 入座
type MatchDataSitDownC struct {
	Seat int64 `json:"seat"` // 座位号
}

type MatchDataSitDownS struct {
	Seat  int64  `json:"seat"`  // 座位号
	Uid   string `json:"uid"`   // 用户id
	Chips int64  `json:"chips"` // 筹码
}

// 离座
type MatchDataSitUpC struct {
	Seat int64 `json:"seat"` // 座位号
}

type MatchDataSitUpS struct {
	Seat int64  `json:"seat"` // 座位号
	Uid  string `json:"uid"`  // 用户id
}

type MatchDataStartGameS struct {
}

type MatchDataRaiseC struct {
	Amount int64 `json:"amount"` // 加注数量
}

// MatchDataPreFlopRoundS 进入PreFlop
type MatchDataPreFlopRoundS struct {
	Hand         []Card             `json:"hand,omitempty"`       // 手牌
	DealerPos    int64              `json:"dealerPos"`            // 庄家位
	ActPos       int64              `json:"actPos"`               // 行动玩家位
	CallAmount   int64              `json:"callAmount,omitempty"` // 当前 call 所需金额
	MinRaiseTo   int64              `json:"minRaiseTo,omitempty"` // 最小加注金额
	CanCheck     bool               `json:"canCheck,omitempty"`   // 是否可以check
	SeatedPlayer []PlayerGameStatus `json:"seatedPlayer"`         // 所有座位玩家状态 PreFlop阶段全量更新
}

// MatchDataDismissC 解散
type MatchDataDismissC struct {
}

type MatchDataDismissS struct {
}

// MatchDataPlayerActionS 统一的玩家动作
type MatchDataPlayerActionS struct {
	ActionType  RoundAction `json:"actionType"`  // 操作类型：check、call、raise、allin、fold
	ActorSeat   int64       `json:"actorSeat"`   // 当前执行操作的玩家座位号（执行者）
	SpentAmount int64       `json:"spentAmount"` // 实际消耗筹码（用于 all-in 不足 call 时）

	MainPot int64 `json:"mainPot"` // 主池
	SidePot int64 `json:"sidePot"` // 边池

	NextSeat   int64 `json:"nextSeat"`   // 下一位轮到行动的玩家座位号
	CallAmount int64 `json:"callAmount"` // 当前 call 所需金额
	MinRaiseTo int64 `json:"minRaiseTo"` // 最小加注金额
	CanCheck   bool  `json:"canCheck"`   // 是否可以check
}

type MatchDataGameNextStage struct {
	ActionType  string `json:"actionType"`  // 操作类型：check、call、raise、allin、fold
	ActorSeat   int64  `json:"actorSeat"`   // 当前执行操作的玩家座位号（执行者）
	SpentAmount int64  `json:"spentAmount"` // 实际消耗筹码（用于 all-in 不足 call 时）

	MainPot int64 `json:"mainPot"` // 主池
	SidePot int64 `json:"sidePot"` // 边池

	NextSeat   int64 `json:"nextSeat"`   // 下一位轮到行动的玩家座位号
	CallAmount int64 `json:"callAmount"` // 当前 call 所需金额
	MinRaiseTo int64 `json:"minRaiseTo"` // 最小加注金额
	CanCheck   bool  `json:"canCheck"`   // 是否可以check

	Stage int64  `json:"stage"`
	Cards []Card `json:"cards"` // 新一轮发的公共牌
}
